Skip to content

Commit 372bb76

Browse files
Merge pull request #89 from FSU-ACM/release
Fall '22 Updates
2 parents e0156cc + f1c8f72 commit 372bb76

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+2495
-553
lines changed

Pipfile

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ django-import-export = "*"
1111
celery = "*"
1212
gunicorn = "*"
1313
six = "*"
14-
"discord.py" = "*"
14+
"discord.py" = "<2.0"
1515
requests = "*"
1616
django-hashid-field = "*"
17+
django-celery-beat = "*"
18+
channels = "*"
1719

1820
[dev-packages]
1921
pylint = "*"

Pipfile.lock

+492-172
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/dev/docker-compose.yaml

+56-11
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,21 @@ services:
1111
environment:
1212
# Django
1313
DEBUG: 'True'
14-
SECRET_KEY: 86@j2=z!=&1r_hoqboog1#*mb$jx=9mf0uw#hrs@lw&7m34sqz
1514
CACHE_LOCATION: redis://redis:6379/0
1615

1716
# Celery
1817
CELERY_BACKEND: redis://redis:6379/1
1918
CELERY_BROKER: amqp://rabbitmq:5672
2019

21-
# Email
22-
EMAIL_BACKEND: django.core.mail.backends.console.EmailBackend
23-
2420
# Database
2521
SQL_HOST: 'mariadb'
2622
SQL_PORT: '3306'
2723
SQL_DATABASE: 'contestsuite'
2824
SQL_USER: 'contestadmin'
2925
SQL_PASSWORD: 'seminoles1!'
3026

31-
# Hashid Salt
32-
HASHID_FIELD_SALT: 0s97rx*t4%68jell&lw3^)97o*kr*+*2o^(76q)ix+ilc!4ax#
27+
# Discord
28+
GUILD_ID: # Discord Server ID
3329
ports:
3430
- 8000:8000
3531
volumes:
@@ -42,20 +38,68 @@ services:
4238
- rabbitmq
4339
- mariadb
4440
- celery_worker
41+
scrape_bot:
42+
image: contestsuite:dev
43+
command: /app/docker/start.sh bot
44+
environment:
45+
# Django
46+
DEBUG: 'True'
47+
48+
# Database
49+
SQL_HOST: 'mariadb'
50+
SQL_PORT: '3306'
51+
SQL_DATABASE: 'contestsuite'
52+
SQL_USER: 'contestadmin'
53+
SQL_PASSWORD: 'seminoles1!'
54+
55+
# Discord
56+
BOT_CHANNEL: # Name of command channel
57+
GUILD_ID: # Discord Server ID
58+
SCRAPE_BOT_TOKEN: # Token for the member list scraping bot
59+
volumes:
60+
- ../../src:/app
61+
- deployment_scripts:/app/docker
62+
networks:
63+
- contestsuite
64+
depends_on:
65+
- mariadb
66+
celery_beat:
67+
image: contestsuite:dev
68+
command: /app/docker/start.sh beat
69+
environment:
70+
# Django
71+
DEBUG: 'True'
72+
73+
# Celery
74+
CELERY_BACKEND: redis://redis:6379/1
75+
CELERY_BROKER: amqp://rabbitmq:5672
76+
77+
# Database
78+
SQL_HOST: 'mariadb'
79+
SQL_PORT: '3306'
80+
SQL_DATABASE: 'contestsuite'
81+
SQL_USER: 'contestadmin'
82+
SQL_PASSWORD: 'seminoles1!'
83+
volumes:
84+
- ../../src:/app
85+
- deployment_scripts:/app/docker
86+
networks:
87+
- contestsuite
88+
depends_on:
89+
- celery_worker
90+
- redis
91+
- rabbitmq
92+
- mariadb
4593
celery_worker:
4694
image: contestsuite:dev
4795
command: /app/docker/start.sh worker
4896
environment:
4997
# Django
5098
DEBUG: 'True'
51-
SECRET_KEY: 86@j2=z!=&1r_hoqboog1#*mb$jx=9mf0uw#hrs@lw&7m34sqz
5299

53100
# Celery
54101
CELERY_BACKEND: redis://redis:6379/1
55102
CELERY_BROKER: amqp://rabbitmq:5672
56-
57-
# Email
58-
MAIL_BACKEND: django.core.mail.backends.console.EmailBackend
59103

60104
# Database
61105
SQL_HOST: 'mariadb'
@@ -65,7 +109,8 @@ services:
65109
SQL_PASSWORD: 'seminoles1!'
66110

67111
# Discord
68-
ANNOUNCEMENT_WEBHOOK_URL: https://discord.com/api/channel_webhook_url
112+
ANNOUNCEMENT_WEBHOOK_URL: # Webhook URL of the contest announcements channel
113+
BOT_CHANNEL_WEBHOOK_URL: # Webhook URL of the bot command channel
69114
volumes:
70115
- ../../src:/app
71116
- deployment_scripts:/app/docker

deploy/prod/contestsuite/docker-swarm.yaml

+88-22
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ services:
1414
- nginx-backend
1515
deploy:
1616
replicas: 2
17+
restart_policy:
18+
max_attempts: 10
1719
rollback_config:
1820
parallelism: 0
1921
update_config:
@@ -26,25 +28,20 @@ services:
2628
environment:
2729
# Django
2830
DEBUG: 'False'
29-
SECRET_KEY: 86@j2=z!=&1r_hoqboog1#*mb$jx=9mf0uw#hrs@lw&7m34sqz
31+
SECRET_KEY: # Project secret key
3032
ALLOWED_HOSTS: contest.cs.fsu.edu
3133
CACHE_TIMEOUT: 300
3234
CACHE_LOCATION: redis://redis:6379/0
33-
TIME_ZONE: America/New_York
3435

3536
# Celery
3637
CELERY_BACKEND: redis://redis:6379/1
3738
CELERY_BROKER: amqp://rabbitmq:5672
3839

3940
# Email
40-
EMAIL_BACKEND: django.core.mail.backends.smtp.EmailBackend
41-
EMAIL_HOST: smtpsubdomain.example.com
42-
EMAIL_PORT: 465
43-
EMAIL_USER: user@example.com
44-
EMAIL_PASSWORD: examplepass
45-
EMAIL_USE_SSL: 'False'
41+
EMAIL_HOST: # smtpsubdomain.example.com
42+
EMAIL_USER: # exampleuser
43+
EMAIL_PASSWORD: # examplepass
4644
EMAIL_USE_TLS: 'True'
47-
DEFAULT_FROM_EMAIL: ACM at FSU Programming Contest<acm@cs.fsu.edu>
4845

4946
# Database
5047
SQL_HOST: mariadb
@@ -54,10 +51,10 @@ services:
5451
SQL_PASSWORD: seminoles1!
5552

5653
# Discord
57-
GUILD_ID: 0
54+
GUILD_ID: # ID of Discord server
5855

59-
# Hashid Module Salt
60-
HASHID_FIELD_SALT: 0s97rx*t4%68jell&lw3^)97o*kr*+*2o^(76q)ix+ilc!4ax#
56+
# Hashid Module
57+
HASHID_FIELD_SALT: # Global Salt
6158
volumes:
6259
- django_app:/app/media
6360
- django_static:/app/static
@@ -67,6 +64,37 @@ services:
6764
- redis-backend
6865
- rabbitmq-backend
6966
deploy:
67+
restart_policy:
68+
max_attempts: 10
69+
rollback_config:
70+
parallelism: 0
71+
update_config:
72+
parallelism: 1
73+
delay: 5s
74+
failure_action: rollback
75+
scrape_bot:
76+
image: acmfsu/contestsuite:latest
77+
command: /app/docker/start.sh bot
78+
environment:
79+
# Django
80+
DEBUG: 'False'
81+
82+
# Database
83+
SQL_HOST: mariadb
84+
SQL_PORT: 3306
85+
SQL_DATABASE: contestsuite
86+
SQL_USER: contestadmin
87+
SQL_PASSWORD: seminoles1!
88+
89+
# Discord
90+
BOT_CHANNEL: # Name of command channel
91+
GUILD_ID: # ID of Discord server
92+
SCRAPE_BOT_TOKEN: # Token for integrated bot
93+
networks:
94+
- mariadb-backend
95+
deploy:
96+
restart_policy:
97+
max_attempts: 10
7098
rollback_config:
7199
parallelism: 0
72100
update_config:
@@ -79,23 +107,18 @@ services:
79107
environment:
80108
# Django
81109
DEBUG: 'False'
110+
SECRET_KEY: # Project secret key
82111
ALLOWED_HOSTS: contest.cs.fsu.edu
83-
SECRET_KEY: 86@j2=z!=&1r_hoqboog1#*mb$jx=9mf0uw#hrs@lw&7m34sqz
84112

85113
# Celery
86114
CELERY_BACKEND: redis://redis:6379/1
87115
CELERY_BROKER: amqp://rabbitmq:5672
88-
CELERY_TIMEZONE: America/New_York
89116

90117
# Email
91-
EMAIL_BACKEND: django.core.mail.backends.smtp.EmailBackend
92-
EMAIL_HOST: smtpsubdomain.example.com
93-
EMAIL_PORT: 465
94-
EMAIL_USER: user@example.com
95-
EMAIL_PASSWORD: examplepass
96-
EMAIL_USE_SSL: 'False'
118+
EMAIL_HOST: # smtpsubdomain.example.com
119+
EMAIL_USER: # exampleuser
120+
EMAIL_PASSWORD: # examplepass
97121
EMAIL_USE_TLS: 'True'
98-
DEFAULT_FROM_EMAIL: ACM at FSU Programming Contest<acm@cs.fsu.edu>
99122

100123
# Database
101124
SQL_HOST: mariadb
@@ -105,7 +128,8 @@ services:
105128
SQL_PASSWORD: seminoles1!
106129

107130
# Discord
108-
ANNOUNCEMENT_WEBHOOK_URL: https://discord.com/api/channel_webhook_url
131+
ANNOUNCEMENT_WEBHOOK_URL: # URL of announcement channel webhook
132+
BOT_CHANNEL_WEBHOOK_URL: # URL of PCS bot control channel webhook
109133
volumes:
110134
- django_app:/app/media
111135
- django_static:/app/static
@@ -114,6 +138,40 @@ services:
114138
- redis-backend
115139
- rabbitmq-backend
116140
deploy:
141+
restart_policy:
142+
max_attempts: 10
143+
rollback_config:
144+
parallelism: 0
145+
update_config:
146+
parallelism: 1
147+
delay: 5s
148+
failure_action: rollback
149+
celery_beat:
150+
image: acmfsu/contestsuite:latest
151+
command: /app/docker/start.sh beat
152+
environment:
153+
# Django
154+
DEBUG: 'False'
155+
156+
# Celery
157+
CELERY_BACKEND: redis://redis:6379/1
158+
CELERY_BROKER: amqp://rabbitmq:5672
159+
160+
# Database
161+
SQL_HOST: mariadb
162+
SQL_PORT: 3306
163+
SQL_DATABASE: contestsuite
164+
SQL_USER: contestadmin
165+
SQL_PASSWORD: seminoles1!
166+
volumes:
167+
- django_static:/app/static
168+
networks:
169+
- mariadb-backend
170+
- redis-backend
171+
- rabbitmq-backend
172+
deploy:
173+
restart_policy:
174+
max_attempts: 10
117175
rollback_config:
118176
parallelism: 0
119177
update_config:
@@ -131,6 +189,8 @@ services:
131189
- nginx-backend
132190
- rabbitmq-backend
133191
deploy:
192+
restart_policy:
193+
max_attempts: 10
134194
rollback_config:
135195
parallelism: 0
136196
update_config:
@@ -149,6 +209,8 @@ services:
149209
networks:
150210
- mariadb-backend
151211
deploy:
212+
restart_policy:
213+
max_attempts: 10
152214
rollback_config:
153215
parallelism: 0
154216
update_config:
@@ -162,6 +224,8 @@ services:
162224
networks:
163225
- redis-backend
164226
deploy:
227+
restart_policy:
228+
max_attempts: 10
165229
rollback_config:
166230
parallelism: 0
167231
update_config:
@@ -175,6 +239,8 @@ services:
175239
networks:
176240
- rabbitmq-backend
177241
deploy:
242+
restart_policy:
243+
max_attempts: 10
178244
rollback_config:
179245
parallelism: 0
180246
update_config:

deploy/prod/contestsuite/scripts/start.sh

+11-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
cd /app
44

55
if [ $# -eq 0 ]; then
6-
echo "Usage: start.sh [PROCESS_TYPE](server/worker)"
6+
echo "Usage: start.sh [PROCESS_TYPE](server/worker/beat)"
77
exit 1
88
fi
99

@@ -35,7 +35,16 @@ elif [ "$PROCESS_TYPE" = "worker" ]; then
3535
--autoscale=10,3 \
3636
-n worker@%n \
3737
--loglevel INFO
38+
elif [ "$PROCESS_TYPE" = "beat" ]; then
39+
celery \
40+
-A contestsuite \
41+
beat \
42+
--loglevel INFO \
43+
--scheduler django_celery_beat.schedulers:DatabaseScheduler
44+
elif [ "$PROCESS_TYPE" = "bot" ]; then
45+
python \
46+
bot.py
3847
else
39-
echo "Invalid [PROCESS_TYPE](server/worker)"
48+
echo "Invalid [PROCESS_TYPE](server/worker/beat)"
4049
exit 1
4150
fi

0 commit comments

Comments
 (0)