Ubuntu で Apache, MySQL, PHP をインストールする. tasksel を用いて簡単にインストールできる.
Ubuntu 20.04では次のバージョンがインストールされる.
【サイト内の関連ページ】
既定(デフォルト)のキャラクタセット: cp932またはutf8
sudo apt -y update sudo apt -y install tasksel sudo tasksel
「LAMP server」のインストールは,端末で次のように操作しても行うことができる.
sudo tasksel --list-tasks sudo tasksel install lamp-server
新しく MySQL にアカウントを作る.ユーザ名は mysqlにしたい場合は次のように操作する.
sudo su - root mysql -u root create user mysql identified by 'パスワード(英文字,数字,記号を使う.日本語は使わない)'; grant all on *.* to mysql; exit exit
パスワードは,英文字,数字,記号を使う.日本語は使わない.
mysqladmin --user=root password "(新しいパスワード)"
すでにパスワードを設定済みで,変更をしたい場合は,次のように操作.
mysqladmin --user=root --password=(古いパスワード) password "(新しいパスワード)"
MySQL に,リモート接続させたくない場合は,リモートからの接続要求を遮断するようにしておく.
sudo apt -y update sudo apt -y install ufw
sudo ufw disable sudo ufw default DENY sudo ufw allow from any to any port ssh sudo ufw enable
sudo ufw status
MySQL に,リモート接続させたくない場合は,my.cnf の設定も行っておく.
/etc/mysql/mysql.conf.d/mysqld.cnf の bind-address の行が 127.0.0.1 になっていることを確認(ローカルからの接続要求のみを受け付ける)
データベースを作成するために,SQL の create database コマンドを使用する.
「-u mysql」と指定することにより,一般ユーザ mysql での接続を行う.
mysql -u mysql -p
プロンプトが出るので, ここでは,MySQL データベース管理者のパスワードを入れる.
画面にパスワードが表示されないのは正常動作.
実行後,エラーメッセージが出ないことを確認
utf8 の場合の生成例
create database testdb default character set utf8 collate utf8_unicode_ci;
cp932 の場合の生成例
create database testdb default character set cp932 collate cp932_japanese_ci;
show databases;
\quit
「-u mysql」と指定することにより,一般ユーザ mysql での接続を行う. 「testdb」はデータベース名.
mysql -u mysql -p -D testdb
プロンプトが出るので, ここでは,MySQL データベース管理者のパスワードを入れる.
画面にパスワードが表示されないのは正常動作.
実行後,エラーメッセージが出ないことを確認
create table order_records ( id integer primary key not null, year integer not null CHECK ( year > 2008 ), month integer not null CHECK ( month >= 1 AND month <= 12 ), day integer not null CHECK ( day >= 1 AND day <= 31 ), customer_name text not null, product_name text not null, unit_price real not null check ( unit_price > 0 ), qty integer not null default 1 check ( qty > 0 ), created_at timestamp not null default current_timestamp, updated_at timestamp not null default current_timestamp on update current_timestamp, check ( ( unit_price * qty ) < 200000 ) );
start transaction; insert into order_records (id, year, month, day, customer_name, product_name, unit_price, qty) values( 1, 2023, 7, 26, 'kaneko', 'orange A', 1.2, 10 ); insert into order_records (id, year, month, day, customer_name, product_name, unit_price, qty) values( 2, 2023, 7, 26, 'miyamoto', 'Apple M', 2.5, 2 ); insert into order_records (id, year, month, day, customer_name, product_name, unit_price, qty) values( 3, 2023, 7, 27, 'kaneko', 'orange B', 1.2, 8 ); insert into order_records (id, year, month, day, customer_name, product_name, unit_price) values( 4, 2023, 7, 28, 'miyamoto', 'Apple L', 3 ); commit;
select * from order_records;
start transaction; update order_records set unit_price = 11.2 where id = 1; commit; select * from order_records;
show tables;
\quit
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted </Directory>
LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
sudo apachectl restart
#!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, World.";
sudo chmod 755 /usr/lib/cgi-bin/hello.pl
http://localhost/cgi-bin/hello.pl