Ceci est le premier message de qiita. Si vous trouvez quelque chose qui ne va pas, je vous serais reconnaissant de bien vouloir commenter ~ Partiellement modifié le 2019/12/18
J'utilise Pycharm.
Le répertoire ressemble à ceci
.
├── db
│ ├── data
│ └── sql
│ └── init.sql
├── docker-compose.yml
├── nginx
│ ├── conf
│ │ └── app_nginx.conf
│ ├── log
│ └── uwsgi_params
├── python
│ ├── Dockerfile
│ └── requirements.txt
├── src
│ └── project
│ ├── app
│ ├── project
│ └── manage.py
│ └── uwsgi.ini
└── static
Utilisez MariaDB. Créez un dossier de données et init.sql pour l'initialisation dans le répertoire db.
CREATE DATABASE IF NOT EXISTS app CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON app.* TO 'app'@'%';
FLUSH PRIVILEGES;
Lors du téléchargement sur github, placez-le dans .gitigonre afin que le mot de passe, etc. ne puisse pas être vu.
Ne créez pas de fichier docker, mais écrivez-le dans docker-compose.yml.
Nginx
Ignorez les fichiers statiques tels que les images vers nginx, qui est un serveur proxy inverse.
app_nginx.conf
upstream django {
ip_hash;
server python:8001;
}
# configuration of the server
server {
# the port your site will be served on
listen 8000;
# the domain name it will serve for
server_name 127.0.0.1; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
location /static {
alias /static;
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
}
}
Tout d'abord, s'il y a un accès, il sera reçu sur le port 8000 de nginx, s'il y a un accès au fichier statique static, il sera ignoré vers static de nginx qui est un serveur proxy inverse, et les autres seront sautés vers le serveur d'application (uWSGI) du port 8001.
uwsgi_params
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
params est ok avec la copie
python
Dockerfile/python
# The first instruction is what image we want to base our container on
# We Use an official Python runtime as a parent image
FROM python:3.8-alpine
# The enviroment variable ensures that the python output is set straight
# to the terminal with out buffering it first
ENV PYTHONUNBUFFERED 1
ENV PYTHONIOENCODING utf-8
ENV APP_PATH code
# Set the working directory to /code
WORKDIR /$APP_PATH
COPY ./requirements.txt /$APP_PATH
# Install any needed packages specified in requirements.txt
RUN apk add --no-cache --virtual .build-deps bash gcc musl-dev libffi-dev \
g++ libgcc libstdc++ libxml2-dev libxslt-dev openssl-dev curl \
&& apk add --no-cache --virtual --update-cache\
jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \
mariadb-dev mariadb-connector-c-dev \
&& pip install cython && pip install -U pip && pip install -r requirements.txt
# Make alpine lighter
RUN rm -rf /var/cache/apk/* && \
rm -rf /tmp/*
Erreurs d'installation fréquentes en fonction des sauts de ligne et des délimiteurs lors de l'ajout d'apk Depuis que cela a fonctionné, la situation actuelle est correcte, alors ...
Django==3.0
flake8==3.7.9
ipython==7.10.1
mysqlclient==1.4.6
Pillow==6.2.1
uWSGI==2.0.18
J'inclus également flake8, qui vérifie le code, et ipython, qui a un interpréteur puissant pour python. Il existe de nombreux pilotes pour la connexion à la base de données, mais nous utilisons le mysqlclient officiellement recommandé. https://docs.djangoproject.com/ja/3.0/ref/databases/#mysql-db-api-drivers
docker-compose.yml
version: '3.4'
services:
nginx:
image: nginx:1.13
container_name: app_nginx
ports:
- "8000:8000"
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
- ./static:/static
- ./nginx/log:/var/log/nginx
depends_on:
- python
db: # the same name as 'host' in DATABASES setting, otherwise Django won't find the database
image: mariadb:10.1
container_name: app_mariadb
ports:
- 3306:3306
environment:
MYSQL_DATABASE: app
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: root
TZ: 'Asia/Tokyo'
volumes:
- ./db/data:/var/lib/mysql
- ./db/sql:/docker-entrypoint-initdb.d
python:
build: ./python
image: python_blog
container_name: app_python
command: uwsgi --ini /code/project/uwsgi.ini
volumes:
- ./src:/code
- ./static:/static
expose:
- "8001"
depends_on:
- db
Faites correspondre la base de données du nom du service avec la base de données de l'hôte dans les paramètres de base de données de django settings.py.
Si tu vas aussi loin Où docker-compose.yml est
$ docker-compose up -d --build
Lançons le conteneur. Le conteneur nginx et python ne démarre pas.
command: uwsgi --ini /code/project/uwsgi.ini
Comme uwsgi.ini n'existe pas encore, créez un projet django et placez-le.
$ docker-compose run --rm python django-admin.py startproject project
Créez un projet django. La partie python est le nom de service de docker-compose.yml Si vous n'ajoutez pas --rm, de nombreux conteneurs python seront créés, supprimez-les à chaque exécution.
[uwsgi]
socket = :8001
module = project.wsgi
wsgi-file = /code/project/project/wsgi.py
logto = /code/project/project/uwsgi.log
chdir=/code/project
py-autoreload = 1
Placez uwsgi.ini
$ docker-compose down
$ docker-compose up -d
$ docker ps -a
Tous les conteneurs semblent être en place
$ docker exec -it app_python /bin/bash
$ cd ./project/
$ python manage.py startapp app
L'environnement python est fait avec alpine linux, et bash n'est pas inclus dans alpine, donc / bin / sh ou / bin / ash. Cette fois je mets bash donc bash Créer une application pour django
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app.apps.AppConfig', #ajouter à
#Changement
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'app',
'USER': 'root',
'PASSWORD': 'root',
'HOST': 'db',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
},
}
#Changez à votre goût
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
STATIC_ROOT = './../../../static/' #Omoto pour la distribution pour l'environnement de production
STATIC_URL = '/static/' #URL utilisée dans l'environnement de production
# Custom Useer
AUTH_USER_MODEL = 'app.User'
Selon le responsable, avant de migrer, j'ai créé un utilisateur personnalisé pour le moment. Créer un utilisateur personnalisé https://docs.djangoproject.com/ja/3.0/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project
models.py
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)
Dans le conteneur Docker
$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py createsuperuser
http://localhost:8000/ Django devrait être en place S'il y a une erreur sur le serveur, réessayez docker-compose up
Après la migration, créez un utilisateur pour l'administrateur django Accédez à http: // localhost: 8000 / admin / djangoadmin Depuis que j'utilise uwsgi, le CSS ne fonctionne pas
$ python manage.py collectstatic
css fonctionne également pour l'administrateur django
Vous devriez maintenant pouvoir vous développer. .. ..
Python3.6 + NGINX + MariaDB10 + uWSGI Django Environment Greedy Set avec Docker-Compose
Recommended Posts