Прежде всего, я хотел бы уточнить, что я полностью разбираюсь в отладке серверов и развертывании в целом. Я студент-разработчик своего университета, и до сих пор вся моя работа была связана с программированием, но на меня возложили ответственность за развертывание в моей команде.
Я пытаюсь развернуть наши приложения Django с помощью gunicorn и wsgi. Мой предыдущий босс (который с нами больше не работает) написал этот сценарий инициализации, который должен запустить сервер wsgi:
#! /bin/sh
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/bin:/usr/bin
PIDFILE=/tmp/site.edu.pid
PROJECT_DIR=/opt/project_name
PROC_NAME="project_name"
NAME=$PROC_NAME
VENV=/opt/envs/project_name
SOCK=/tmp/site.edu.sock
CMD="gunicorn project_name.wsgi:application --pid $PIDFILE --bind unix:$SOCK --workers 9 --name $PROC_NAME --preload --daemon --timeout 300 --error-logfile '-' --log-file '-'"
USER="www-data"
. $VENV/bin/activate;
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
if [ -e $PIDFILE ]; then
return 1
fi
cd $PROJECT_DIR
. $VENV/bin/activate
$CMD
if [ $? = 0 ]; then
return 0
else
return 2
fi
sleep 1;
chown $USER:nogroup $SOCK;
chmod 660 $SOCK;
}
Насколько я понимаю, это должно запустить gunicorn и создать unix-сокет и pidfile в каталоге / tmp, а также запустить сервер, однако, похоже, это не так, поскольку эти файлы отсутствуют в каталоге / tmp ( вызывая 502 плохой шлюз в нашей конфигурации nginx).
Я также должен отметить, что это работает в виртуальной среде Python 2 (поскольку все они раньше развертывались с использованием python 2), но не в виртуальной среде python 3 (на сервере), но она работает локально в виртуальной среде python3.
Кроме того, у меня действительно есть один сайт, успешно работающий с использованием Python 3 и этой конфигурации, но я не могу понять, почему другие не работают (поскольку все их виртуальные среды имеют одинаковые требования и версии Gunicorn gunicorn==20.0.4
)
Как уже упоминалось, у меня очень ограниченные знания о серверах, и я стараюсь учиться как можно лучше. Если бы кто-нибудь мог дать какие-либо советы по отладке.
Вот результат, когда я запускаю systemctl status working-site.edu.service
working-site.edu.service - LSB: working_project initscript
Loaded: loaded (/etc/init.d/working-site.edu.sh; generated)
Active: active (running) since Tue 2020-07-14 17:04:44 EDT; 1 day 19h ago
Docs: man:systemd-sysv-generator(8)
Tasks: 10 (limit: 4638)
CGroup: /system.slice/working-site.edu.service
├─27489 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
├─27493 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
├─27494 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
├─27495 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
├─27496 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
├─27497 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
├─27498 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
├─27499 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
├─27500 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
└─27501 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
Jul 14 17:04:44 staging-server systemd[1]: Starting LSB: working_project initscript...
Jul 14 17:04:44 staging-server systemd[1]: Started LSB: working_project initscript.
Против, когда я бегу systemctl status broken-site.edu.service
broken-site.edu.service - LSB: broken_project initscript
Loaded: loaded (/etc/init.d/broken-site.edu.sh; generated)
Active: active (exited) since Thu 2020-07-16 12:51:26 EDT; 15min ago
Docs: man:systemd-sysv-generator(8)
Process: 32425 ExecStart=/etc/init.d/broken-site.edu.sh start (code=exited, status=0/SUCCESS)
Jul 16 12:51:26 staging-server systemd[1]: Starting LSB: broken_project initscript...
Jul 16 12:51:26 staging-server systemd[1]: Started LSB: broken_project initscript.
Я был бы признателен за любые советы по отладке на этом. Я пытаюсь изучить конфигурации серверов как можно лучше, но я был брошен в самую глубину этого, пытаясь собрать все воедино по ходу дела.
Спасибо!