You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

7.3 KiB

Deploying DjangoBlog with Docker

Docker Pulls Docker Image Version (latest by date) Docker Image Size (latest by date)

This project fully supports containerized deployment using Docker, providing you with a fast, consistent, and isolated runtime environment. We recommend using docker-compose to launch the entire blog service stack with a single command.

1. Prerequisites

Before you begin, please ensure you have the following software installed on your system:

This is the simplest and most recommended way to deploy. It automatically creates and manages the Django application, a MySQL database, and an optional Elasticsearch service for you.

Step 1: Start the Basic Services

From the project's root directory, run the following command:

# Build and start the containers in detached mode (includes Django app and MySQL)
docker-compose up -d --build

docker-compose will read the docker-compose.yml file, pull the necessary images, build the project image, and start all services.

  • Access Your Blog: Once the services are up, you can access the blog by navigating to http://127.0.0.1 in your browser.
  • Data Persistence: MySQL data files will be stored in the data/mysql directory within the project root, ensuring that your data persists across container restarts.

If you want to use Elasticsearch for more powerful full-text search capabilities, you can include the docker-compose.es.yml configuration file:

# Build and start all services in detached mode (Django, MySQL, Elasticsearch)
docker-compose -f docker-compose.yml -f deploy/docker-compose/docker-compose.es.yml up -d --build
  • Data Persistence: Elasticsearch data will be stored in the data/elasticsearch directory.

Step 3: First-Time Initialization

After the containers start for the first time, you'll need to execute some initialization commands inside the application container.

# Get a shell inside the djangoblog application container (named 'web')
docker-compose exec web bash

# Inside the container, run the following commands:
# Create a superuser account (follow the prompts to set username, email, and password)
python manage.py createsuperuser

# (Optional) Create some test data
python manage.py create_testdata

# (Optional, if ES is enabled) Create the search index
python manage.py rebuild_index

# Exit the container
exit

3. Alternative Method: Using the Standalone Docker Image

If you already have an external MySQL database running, you can run the DjangoBlog application image by itself.

# Pull the latest image from Docker Hub
docker pull liangliangyy/djangoblog:latest

# Run the container and connect it to your external database
docker run -d \
  -p 8000:8000 \
  -e DJANGO_SECRET_KEY='your-strong-secret-key' \
  -e DJANGO_MYSQL_HOST='your-mysql-host' \
  -e DJANGO_MYSQL_USER='your-mysql-user' \
  -e DJANGO_MYSQL_PASSWORD='your-mysql-password' \
  -e DJANGO_MYSQL_DATABASE='djangoblog' \
  --name djangoblog \
  liangliangyy/djangoblog:latest
  • Access Your Blog: After startup, visit http://127.0.0.1:8000.
  • Create Superuser: docker exec -it djangoblog python manage.py createsuperuser

4. Configuration (Environment Variables)

Most of the project's configuration is managed through environment variables. You can modify them in the docker-compose.yml file or pass them using the -e flag with the docker run command.

Environment Variable Default/Example Value Notes
DJANGO_SECRET_KEY your-strong-secret-key Must be changed to a random, complex string!
DJANGO_DEBUG False Toggles Django's debug mode.
DJANGO_MYSQL_HOST mysql Database hostname.
DJANGO_MYSQL_PORT 3306 Database port.
DJANGO_MYSQL_DATABASE djangoblog Database name.
DJANGO_MYSQL_USER root Database username.
DJANGO_MYSQL_PASSWORD djangoblog_123 Database password.
DJANGO_REDIS_URL redis:6379/0 Redis connection URL (for caching).
DJANGO_ELASTICSEARCH_HOST elasticsearch:9200 Elasticsearch host address.
DJANGO_EMAIL_HOST smtp.example.org Email server address.
DJANGO_EMAIL_PORT 465 Email server port.
DJANGO_EMAIL_USER user@example.org Email account username.
DJANGO_EMAIL_PASSWORD your-email-password Email account password.
DJANGO_EMAIL_USE_SSL True Whether to use SSL.
DJANGO_EMAIL_USE_TLS False Whether to use TLS.
DJANGO_ADMIN_EMAIL admin@example.org Admin email for receiving error reports.
DJANGO_BAIDU_NOTIFY_URL http://data.zz.baidu.com/... Push API from Baidu Webmaster Tools.

After deployment, please review and adjust these environment variables according to your needs, especially DJANGO_SECRET_KEY and the database and email settings.