🧅
DockerでPerlの環境を作成する
作成したもの
アイドルマスターのキャラクターを検索できるアプリケーションです。
LTした時のスライドです
データベース内の情報はこちらのレポジトリのSQLを使用させていただきました。
詳細
ApachでPerlを動作させ、Docker上のMySQLからデータを取得しています。
サーバー
Ubuntuにapache2
とmysql-client
、DBD::mysql
などをインストールします。
これで、PerlからMySQLに接続可能にします。
/server/Dockerfile
FROM ubuntu:16.04
RUN \
DEBIAN_FRONTEND=noninteractive && \
apt-get update && \
apt-get install -y \
build-essential \
apt-utils \
ssl-cert \
apache2 \
apache2-utils \
apache2-dev \
libapache2-mod-perl2 \
libapache2-mod-perl2-dev \
libcgi-pm-perl \
liblocal-lib-perl \
cpanminus \
libexpat1-dev \
libssl-dev \
mysql-client \
libmysqlclient-dev \
libapreq2-dev \
zip && \
cpanm DBD::mysql && \
a2enmod cgid && \
a2enmod rewrite && \
a2dissite 000-default && \
apt-get update -y && \
apt-get upgrade -y && \
apt-get -y clean
COPY localhost.conf /etc/apache2/sites-enabled/localhost.conf
COPY ./app /var/www/html
RUN chmod 777 /var/www/html/
RUN chmod 777 /usr/bin/perl
VOLUME ["/var/www/html"]
EXPOSE 80
ENTRYPOINT [ "/usr/sbin/apache2ctl", "-D", "FOREGROUND" ]
Apachの設定
DocumentRoot /var/www/html
と設定し、/var/www/html
にPerlのファイルを配置してください。
AddHandler cgi-script .cgi .pl
と設定し、.pl
ファイルをCGIとして実行できるようにします。
/server/localhost.conf
ServerName localhost
AddHandler cgi-script .cgi .pl
<Directory /var/www/html>
Options All
AllowOverride All
</Directory>
<VirtualHost *:80>
DocumentRoot /var/www/html
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
MySQL
MySQLのコンテナです。
./db/init:/docker-entrypoint-initdb.d
/docker-entrypoint-initdb.d
に.sql
を配置することで、MySQL起動時にデータを挿入しています。
/docker-compose.yml
db:
build: ./db
volumes:
- ./db/save_data:/var/lib/mysql
- ./db/init:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: fuel_dev
MYSQL_USER: test
MYSQL_PASSWORD: test
ports:
- 3306:3306
まとめ
- Perlのファイルの改行コードはLFにする。
-
/var/www/html/
には、755のようなパーミッションを与える。- Perl(CGI)を実行するユーザー(www-data)に実行権限と読み取り権限を与える必要があります。
Discussion