narnaud
2 years ago
17 changed files with 506 additions and 2 deletions
@ -0,0 +1 @@ |
|||||
|
srcs/.env |
@ -0,0 +1,23 @@ |
|||||
|
NAME = inception |
||||
|
|
||||
|
all: prune reload |
||||
|
|
||||
|
domain: |
||||
|
echo "127.0.0.1 narnaud.42.fr" >> /etc/hosts |
||||
|
|
||||
|
start: |
||||
|
BUILDKIT_PROGRESS=plain docker compose -f srcs/docker-compose.yml up --build |
||||
|
|
||||
|
stop: |
||||
|
docker compose -f srcs/docker-compose.yml down |
||||
|
|
||||
|
prune: stop |
||||
|
docker system prune -f |
||||
|
|
||||
|
fclean: prune |
||||
|
rm -rf /home/narnaud/data |
||||
|
|
||||
|
re: fclean start |
||||
|
|
||||
|
|
||||
|
.PHONY: domain start stop fclean prune all |
@ -1,4 +1,43 @@ |
|||||
# Inception |
# Inception |
||||
|
|
||||
Projet 42: |
Projet 42: |
||||
Sujet: Conteneuriser un serveur wordpress à l'aide de docker, alpine/debian, nginx et mariadb |
Sujet: Conteneuriser un serveur web qui hebergera wordpress localement à l'aide de docker, alpine/debian, nginx et mariadb |
||||
|
|
||||
|
|
||||
|
## Todo: |
||||
|
- use variables folders name for volumes and domain |
||||
|
- add a bonus |
||||
|
- add a ftp server |
||||
|
|
||||
|
## Instructions: |
||||
|
|
||||
|
### Setup it: |
||||
|
Create a `.env` file in `srcs` folder whith this content and fullfill empty variables. |
||||
|
``` |
||||
|
MYSQL_HOST=mariadb |
||||
|
MYSQL_ROOT_PWD= |
||||
|
|
||||
|
WP_DATABASE_NAME=wordpress |
||||
|
WP_DATABASE_USR=maria |
||||
|
WP_DATABASE_PWD= |
||||
|
|
||||
|
WP_URL=localhost/wordpress |
||||
|
|
||||
|
WP_TITLE=Inception |
||||
|
WP_ADMIN_USR=admin |
||||
|
WP_ADMIN_PWD= |
||||
|
WP_ADMIN_EMAIL= |
||||
|
WP_USR= |
||||
|
WP_PWD= |
||||
|
WP_EMAIL= |
||||
|
``` |
||||
|
|
||||
|
### Start it: |
||||
|
If you want to use a custom domain as local host, modify the Makefile HOST variable and `make domain`. |
||||
|
To custom static page content, just edit `srcs/bonus/hexo/*_conf.yml` files with what you what to use before build. |
||||
|
To build and start, `make` into git root. |
||||
|
|
||||
|
### Use it: |
||||
|
For acces to homepage, visit `localhost` or your domain url (`DOMAIN_URL`) from your browser. |
||||
|
For acces to wordpress, click on blog in homepage or acces `DOMAIN_URL/wordpress`. |
||||
|
For acces to adminer, acces `DOMAIN_URL/wordpress/adminer.php` |
||||
|
@ -0,0 +1,12 @@ |
|||||
|
FROM alpine:3.15 |
||||
|
RUN apk update && apk upgrade && apk add --no-cache \ |
||||
|
wget git npm |
||||
|
|
||||
|
RUN adduser -S nginx && addgroup -S nginx |
||||
|
COPY academia_config.yml /tmp/academia_config.yml |
||||
|
COPY hexo_config.yml /tmp/hexo_config.yml |
||||
|
|
||||
|
WORKDIR /var/www/html |
||||
|
|
||||
|
COPY init.sh /tmp/init.sh |
||||
|
ENTRYPOINT [ "sh", "/tmp/init.sh" ] |
@ -0,0 +1,69 @@ |
|||||
|
favicon: /img/favicon.png |
||||
|
# Change to your profile picture |
||||
|
avatar: /img/avatar.jpg |
||||
|
# if author sets in hexo_config, this string doesn't work |
||||
|
author: 'Nicolas Arnaud' |
||||
|
author_bio: "I'm a 28 y.o developer still learning at 42Nice school." |
||||
|
|
||||
|
since: 2022 |
||||
|
|
||||
|
# Top Menu 顶部菜单 |
||||
|
# #title 为页内跳转,单页模式 |
||||
|
# 可以选择外链或其他页面 |
||||
|
menu: |
||||
|
Publications: /#Publications |
||||
|
About: / |
||||
|
Blog: https://localhost/wordpress |
||||
|
|
||||
|
# flink picture will load if avator link calls on error |
||||
|
loading_bg: |
||||
|
flink: /img/profile.png |
||||
|
|
||||
|
# Social Links; 社交链接,不需要的链接直接注释掉 |
||||
|
# 可以调整显示顺序 |
||||
|
# 图标调用 font-awesome 4.7 |
||||
|
social: |
||||
|
enable: true |
||||
|
social_links: |
||||
|
fab fa-twitter: / |
||||
|
fab fa-facebook-square: / |
||||
|
fab fa-github: / |
||||
|
fab fa-stack-overflow: / |
||||
|
fab fa-linkedin: / |
||||
|
fab fa-weibo: / |
||||
|
fab fa-weixin: / |
||||
|
fab fa-qq: / |
||||
|
fas fa-envelope: / #E-mail |
||||
|
fas fa-rss: / #rss |
||||
|
|
||||
|
# Additional social_links,额外添加自定义链接,可显示链接名称 |
||||
|
# name: url || icon_name |
||||
|
e_social: |
||||
|
enable: true |
||||
|
e_social_links: |
||||
|
Google Scholar: / || fas fa-graduation-cap |
||||
|
ORCID: / || fab fa-orcid |
||||
|
|
||||
|
# CV download link |
||||
|
cv_dl: |
||||
|
enable: true |
||||
|
dir: /attaches/CV.pdf |
||||
|
description: My Detail CV. |
||||
|
|
||||
|
# Box-shadow |
||||
|
# display box-shadow on page or not |
||||
|
box_shadow: |
||||
|
enable: false |
||||
|
|
||||
|
# CDN |
||||
|
# 根据需要自行添加js/css |
||||
|
# 自定义css可以直接写在user.styl中 |
||||
|
CDN_USE: |
||||
|
css: |
||||
|
- /css/index.css |
||||
|
# - https://cdn.jsdelivr.net/npm/font-awesome@latest/css/font-awesome.min.css |
||||
|
- https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.13.0/css/all.min.css # fontawesome 5 |
||||
|
js: |
||||
|
- https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js #/js/third-party/jquery.min.js |
||||
|
- https://cdn.jsdelivr.net/npm/jquery-pjax@latest/jquery.pjax.min.js |
||||
|
- /js/main.js |
@ -0,0 +1,105 @@ |
|||||
|
# Hexo Configuration |
||||
|
## Docs: https://hexo.io/docs/configuration.html |
||||
|
## Source: https://github.com/hexojs/hexo/ |
||||
|
|
||||
|
# Site |
||||
|
title: N.Arnaud's homepage |
||||
|
subtitle: '' |
||||
|
description: '' |
||||
|
keywords: |
||||
|
author: Nicolas Arnaud |
||||
|
language: en |
||||
|
timezone: 'Europe/Paris' |
||||
|
|
||||
|
# URL |
||||
|
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project' |
||||
|
url: https://localhost |
||||
|
permalink: :year/:month/:day/:title/ |
||||
|
permalink_defaults: |
||||
|
pretty_urls: |
||||
|
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks |
||||
|
trailing_html: true # Set to false to remove trailing '.html' from permalinks |
||||
|
|
||||
|
# Directory |
||||
|
source_dir: source |
||||
|
public_dir: public |
||||
|
tag_dir: tags |
||||
|
archive_dir: archives |
||||
|
category_dir: categories |
||||
|
code_dir: downloads/code |
||||
|
i18n_dir: :lang |
||||
|
skip_render: |
||||
|
|
||||
|
# Writing |
||||
|
new_post_name: :title.md # File name of new posts |
||||
|
default_layout: post |
||||
|
titlecase: false # Transform title into titlecase |
||||
|
external_link: |
||||
|
enable: true # Open external links in new tab |
||||
|
field: site # Apply to the whole site |
||||
|
exclude: '' |
||||
|
filename_case: 0 |
||||
|
render_drafts: false |
||||
|
post_asset_folder: false |
||||
|
relative_link: false |
||||
|
future: true |
||||
|
highlight: |
||||
|
enable: true |
||||
|
line_number: true |
||||
|
auto_detect: false |
||||
|
tab_replace: '' |
||||
|
wrap: true |
||||
|
hljs: false |
||||
|
prismjs: |
||||
|
enable: false |
||||
|
preprocess: true |
||||
|
line_number: true |
||||
|
tab_replace: '' |
||||
|
|
||||
|
# Home page setting |
||||
|
# path: Root path for your blogs index page. (default = '') |
||||
|
# per_page: Posts displayed per page. (0 = disable pagination) |
||||
|
# order_by: Posts order. (Order by date descending by default) |
||||
|
index_generator: |
||||
|
path: '' |
||||
|
per_page: 10 |
||||
|
order_by: -date |
||||
|
|
||||
|
# Category & Tag |
||||
|
default_category: uncategorized |
||||
|
category_map: |
||||
|
tag_map: |
||||
|
|
||||
|
# Metadata elements |
||||
|
## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta |
||||
|
meta_generator: true |
||||
|
|
||||
|
# Date / Time format |
||||
|
## Hexo uses Moment.js to parse and display date |
||||
|
## You can customize the date format as defined in |
||||
|
## http://momentjs.com/docs/#/displaying/format/ |
||||
|
date_format: YYYY-MM-DD |
||||
|
time_format: HH:mm:ss |
||||
|
## updated_option supports 'mtime', 'date', 'empty' |
||||
|
updated_option: 'mtime' |
||||
|
|
||||
|
# Pagination |
||||
|
## Set per_page to 0 to disable pagination |
||||
|
per_page: 10 |
||||
|
pagination_dir: page |
||||
|
|
||||
|
# Include / Exclude file(s) |
||||
|
## include:/exclude: options only apply to the 'source/' folder |
||||
|
include: |
||||
|
exclude: |
||||
|
ignore: |
||||
|
|
||||
|
# Extensions |
||||
|
## Plugins: https://hexo.io/plugins/ |
||||
|
## Themes: https://hexo.io/themes/ |
||||
|
theme: Academia |
||||
|
|
||||
|
# Deployment |
||||
|
## Docs: https://hexo.io/docs/one-command-deployment |
||||
|
deploy: |
||||
|
type: '' |
@ -0,0 +1,13 @@ |
|||||
|
#!/bin/sh |
||||
|
if [ ! -f "/var/www/html/index.html" ]; then |
||||
|
npm install -g hexo-cli |
||||
|
hexo init && npm install |
||||
|
git clone https://github.com/PhosphorW/hexo-theme-academia.git themes/Academia |
||||
|
npm install hexo-renderer-pug hexo-renderer-stylus --save |
||||
|
sed -i "/theme: .*/c\theme: Academia" _config.yml |
||||
|
|
||||
|
cp /tmp/hexo_config.yml _config.yml |
||||
|
cp /tmp/academia_config.yml themes/Academia/_config.yml |
||||
|
fi |
||||
|
|
||||
|
hexo generate |
@ -0,0 +1,5 @@ |
|||||
|
FROM alpine:3.15 |
||||
|
|
||||
|
RUN apk update && apk upgrade && apk add --no-cache redis |
||||
|
|
||||
|
CMD ["redis-server", "--protected-mode", "no"] |
@ -0,0 +1,67 @@ |
|||||
|
version: '3.8' |
||||
|
|
||||
|
networks: |
||||
|
local: |
||||
|
|
||||
|
services: |
||||
|
mariadb: |
||||
|
build: mariadb/ |
||||
|
container_name: mariadb |
||||
|
ports: |
||||
|
- 3306:3306 |
||||
|
volumes: |
||||
|
- "/home/narnaud/data/mariadb:/var/lib/mysql" |
||||
|
networks: |
||||
|
- local |
||||
|
restart: always |
||||
|
env_file: .env |
||||
|
|
||||
|
redis: |
||||
|
build: bonus/redis |
||||
|
container_name: redis |
||||
|
ports: |
||||
|
- 6379:6379 |
||||
|
networks: |
||||
|
- local |
||||
|
restart: always |
||||
|
|
||||
|
hexo: |
||||
|
build: bonus/hexo/ |
||||
|
container_name: hexo |
||||
|
volumes: |
||||
|
- '/home/narnaud/data/www:/var/www' |
||||
|
networks: |
||||
|
- local |
||||
|
env_file: .env |
||||
|
|
||||
|
wordpress: |
||||
|
build: wordpress/ |
||||
|
container_name: wordpress |
||||
|
depends_on: |
||||
|
- mariadb |
||||
|
- redis |
||||
|
ports: |
||||
|
- 9000:9000 |
||||
|
- 4000:4000 |
||||
|
volumes: |
||||
|
- '/home/narnaud/data/www:/var/www' |
||||
|
networks: |
||||
|
- local |
||||
|
restart: always |
||||
|
env_file: .env |
||||
|
|
||||
|
nginx: |
||||
|
build: nginx/ |
||||
|
container_name: nginx |
||||
|
depends_on: |
||||
|
- wordpress |
||||
|
- hexo |
||||
|
ports: |
||||
|
- 80:80 |
||||
|
- 443:443 |
||||
|
volumes: |
||||
|
- '/home/narnaud/data/www:/var/www' |
||||
|
- '/home/narnaud/data/logs:/var/log/nginx' |
||||
|
networks: |
||||
|
- local |
||||
|
restart: always |
@ -0,0 +1,8 @@ |
|||||
|
FROM alpine:3.15 |
||||
|
|
||||
|
RUN apk update && apk upgrade && apk add --no-cache \ |
||||
|
mariadb mariadb-client |
||||
|
|
||||
|
COPY init.sh /tmp/init.sh |
||||
|
|
||||
|
ENTRYPOINT ["sh", "/tmp/init.sh"] |
@ -0,0 +1,41 @@ |
|||||
|
#!/bin/sh |
||||
|
|
||||
|
if [ ! -d "/run/mysqld" ]; then |
||||
|
mkdir -p /run/mysqld |
||||
|
chown -R mysql:mysql /run/mysqld |
||||
|
fi |
||||
|
|
||||
|
if [ ! -d "/var/lib/mysql/mysql" ]; then |
||||
|
|
||||
|
chown -R mysql:mysql /var/lib/mysql |
||||
|
|
||||
|
mysql_install_db --basedir=/usr --datadir=/var/lib/mysql --user=mysql --rpm > /dev/null |
||||
|
|
||||
|
tfile=`mktemp` |
||||
|
if [ ! -f "$tfile" ]; then |
||||
|
return 1 |
||||
|
fi |
||||
|
|
||||
|
cat << EOF > $tfile |
||||
|
USE mysql; |
||||
|
FLUSH PRIVILEGES; |
||||
|
|
||||
|
DELETE FROM mysql.user WHERE User=''; |
||||
|
DROP DATABASE test; |
||||
|
DELETE FROM mysql.db WHERE Db='test'; |
||||
|
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); |
||||
|
|
||||
|
ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PWD'; |
||||
|
CREATE DATABASE $WP_DATABASE_NAME CHARACTER SET utf8 COLLATE utf8_general_ci; |
||||
|
CREATE USER '$WP_DATABASE_USR'@'%' IDENTIFIED by '$WP_DATABASE_PWD'; |
||||
|
GRANT ALL PRIVILEGES ON $WP_DATABASE_NAME.* TO '$WP_DATABASE_USR'@'%'; |
||||
|
|
||||
|
FLUSH PRIVILEGES; |
||||
|
EOF |
||||
|
/usr/bin/mysqld --user=mysql --bootstrap < $tfile |
||||
|
rm -f $tfile |
||||
|
fi |
||||
|
sed -i "s|skip-networking|# skip-networking|g" /etc/my.cnf.d/mariadb-server.cnf |
||||
|
sed -i "s|.*bind-address\s*=.*|bind-address=0.0.0.0|g" /etc/my.cnf.d/mariadb-server.cnf |
||||
|
|
||||
|
exec /usr/bin/mysqld --user=mysql --console |
@ -0,0 +1,15 @@ |
|||||
|
FROM alpine:3.15 |
||||
|
|
||||
|
RUN apk update && apk upgrade && apk add --no-cache \ |
||||
|
nginx \ |
||||
|
openssl |
||||
|
|
||||
|
RUN mkdir /etc/nginx/ssl |
||||
|
RUN openssl req -newkey rsa:4096 -x509 -sha256 -days 365 -nodes \ |
||||
|
-out /etc/nginx/ssl/inception.pem -keyout /etc/nginx/ssl/inception.key \ |
||||
|
-subj "/C=FR/ST=Nice/L=Nice/O=42/OU=student/CN=inception_narnaud/" |
||||
|
|
||||
|
RUN mkdir -p /run/nginx |
||||
|
COPY nginx.conf /etc/nginx/http.d/default.conf |
||||
|
|
||||
|
ENTRYPOINT ["nginx", "-g", "daemon off;"] |
@ -0,0 +1,38 @@ |
|||||
|
server { |
||||
|
listen 80; |
||||
|
listen [::]:80; |
||||
|
server_name localhost; |
||||
|
|
||||
|
return 301 https://$host$request_uri; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
server { |
||||
|
listen 443 ssl; |
||||
|
listen [::]:443 ssl; |
||||
|
server_name localhost; |
||||
|
|
||||
|
ssl_certificate /etc/nginx/ssl/inception.pem; |
||||
|
ssl_certificate_key /etc/nginx/ssl/inception.key; |
||||
|
ssl_protocols TLSv1.2 TLSv1.3; |
||||
|
|
||||
|
root /var/www/html/public; |
||||
|
index index.php index.html; |
||||
|
|
||||
|
location / { |
||||
|
try_files $uri $uri/ =404; |
||||
|
} |
||||
|
|
||||
|
location /wordpress { |
||||
|
root /var/www; |
||||
|
try_files $uri $uri/ /wordpress/index.php?$args; |
||||
|
location ~ /wordpress/(.+\.php)$ { |
||||
|
include fastcgi_params; |
||||
|
fastcgi_pass wordpress:9000; |
||||
|
fastcgi_index index.php; |
||||
|
fastcgi_intercept_errors on; |
||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; |
||||
|
fastcgi_param HTTPS on; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
FROM alpine:3.15 |
||||
|
|
||||
|
RUN apk update && apk upgrade && apk add --no-cache \ |
||||
|
wget tar mariadb-client php8 php8-fpm \ |
||||
|
php8-bcmath php8-bz2 php8-calendar php8-ctype php8-curl php8-dom php8-exif php8-fileinfo \ |
||||
|
php8-gd php8-gmp php8-iconv php8-pecl-imagick php8-imap php8-intl php8-json php8-mbstring \ |
||||
|
php8-pecl-mcrypt php8-pecl-memcache php8-mysqli php8-mysqlnd php8-openssl php8-pcntl php8-pdo \ |
||||
|
php8-pdo_mysql php8-pdo_pgsql php8-pdo_sqlite php8-pgsql php8-phar php8-posix php8-session \ |
||||
|
php8-shmop php8-simplexml php8-soap php8-sockets php8-sodium php8-sqlite3 php8-sysvsem \ |
||||
|
php8-sysvshm php8-tokenizer php8-xml php8-xmlreader php8-xmlwriter php8-xsl php8-zip php8-zlib |
||||
|
|
||||
|
RUN adduser -S nginx && addgroup -S nginx |
||||
|
COPY php-fpm.conf /etc/php8/php-fpm.conf |
||||
|
COPY www.conf /etc/php8/php-fpm.d/www.conf |
||||
|
|
||||
|
RUN wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar |
||||
|
RUN chmod +x wp-cli.phar |
||||
|
RUN cp wp-cli.phar /usr/bin/wp |
||||
|
RUN ln -s /usr/bin/php8 /usr/bin/php |
||||
|
|
||||
|
WORKDIR /var/www/wordpress/ |
||||
|
|
||||
|
|
||||
|
COPY init.sh /tmp/init.sh |
||||
|
ENTRYPOINT [ "sh", "/tmp/init.sh" ] |
@ -0,0 +1,23 @@ |
|||||
|
#!/bin/sh |
||||
|
while ! mariadb -h$MYSQL_HOST -u$WP_DATABASE_USR -p$WP_DATABASE_PWD $WP_DATABASE_NAME &>/dev/null; do |
||||
|
sleep 5 |
||||
|
done |
||||
|
|
||||
|
if [ ! -f "/var/www/wordpress/index.php" ]; then |
||||
|
wp core download --allow-root |
||||
|
wp config create --dbname=$WP_DATABASE_NAME --dbuser=$WP_DATABASE_USR --dbpass=$WP_DATABASE_PWD --dbhost=$MYSQL_HOST --dbcharset="utf8" --dbcollate="utf8_general_ci" --allow-root |
||||
|
wp core install --url=$WP_URL --title=$WP_TITLE --admin_user=$WP_ADMIN_USR --admin_password=$WP_ADMIN_PWD --admin_email=$WP_ADMIN_EMAIL --skip-email --allow-root |
||||
|
wp user create $WP_USR $WP_EMAIL --role=author --user_pass=$WP_PWD --allow-root |
||||
|
|
||||
|
sed -i "90i define('WP_REDIS_HOST', 'redis');" wp-config.php |
||||
|
sed -i "91i define('WP_REDIS_PORT', 6379);" wp-config.php |
||||
|
sed -i "92i define('WP_REDIS_TIMEOUT', 1);" wp-config.php |
||||
|
sed -i "93i define('WP_REDIS_READ_TIMEOUT', 1);" wp-config.php |
||||
|
sed -i "94i define('WP_REDIS_DATABASE', 0);" wp-config.php |
||||
|
|
||||
|
wp plugin install redis-cache --activate --allow-root |
||||
|
wp plugin update --all --allow-root |
||||
|
wget -O /var/www/wordpress/adminer.php https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1-mysql-en.php |
||||
|
fi |
||||
|
wp redis enable --allow-root |
||||
|
/usr/sbin/php-fpm8 -F -R |
@ -0,0 +1,10 @@ |
|||||
|
[global] |
||||
|
pid = run/php-fpm8.pid |
||||
|
|
||||
|
emergency_restart_threshold = 10 |
||||
|
|
||||
|
emergency_restart_interval = 10m |
||||
|
|
||||
|
daemonize = yes |
||||
|
|
||||
|
include=/etc/php8/php-fpm.d/*.conf |
@ -0,0 +1,10 @@ |
|||||
|
[www] |
||||
|
user = nginx |
||||
|
group = nginx |
||||
|
listen = 9000 |
||||
|
|
||||
|
pm = dynamic |
||||
|
pm.max_children = 5 |
||||
|
pm.start_servers = 2 |
||||
|
pm.min_spare_servers = 1 |
||||
|
pm.max_spare_servers = 3 |
Loading…
Reference in new issue