TL:DR;
I'm looking for advice / tips on running a LimeSurvey setup in the cloud (Amazon Web Services).
No, we can't use LimeService - for various reasons (data sovereignty legislation in my country, organisational customer data handling guidelines, etc).
----
My requirements
I'm not so interested in building a high-scale setup, nor even a zero-downtime setup (I'm a little interested in those too, but not initially). All I'm trying to do is build reliable survey functionality for the various parts of my organisation that want to run surveys (both internal and external, some with sensitive user data).
Long term, some of the surveys will actually be integrated with backend systems / business processes within the organisation (surverys for new customers, lost customers, etc.). If it goes down for a short while because some hardware died or a VM got stepped on - that's ok. Just so long as it comes back up in good shape and people can keep taking surveys.
My setup
I have a LimeSurvey installation that runs on AWS, and it seems to be functional - though some LimeSurvey features don't work yet.
My current setup is running LimeSurvey as an AWS Elastic-Beanstalk (EB) application running LimeSurvey as a docker container. It runs behind an AWS Elastic-Load-Balancer (ELB), with an AWS Auto-Scaling-Group (ASG) set up to have a minimum and maximum instance count of 1.
The ASG will bring up a single new instance of LimeSurvey if the current one goes down for whatever reason - there should never be more than one instance running at a time.
The database is an AWS Relational-Data-Store (RDS) instance of Postgres 9.5.
Stuff that works
Currently - the LimeSurvey "tmp", "upload" and "application/config" directories are all mapped onto the VM's boot disk (ephemeral - the boot disk is destroyed when the VM dies).
I believe this is Ok for tmp and config because:
- The tmp directory should only contain temporary stuff, so that should be ok if those files suddenly disappear.
- I treat the LimeSurvey config directory, like all the rest of the OS/Nginx/PHP configuration - changing config involves doing the config changes in a local development environment and then committing those changes to the application's source code.
The config directory will then be overwritten with the new changes the next time the application is deployed to Elastic-Beanstalk.
Current problems
- Uploads (images, vidoes, other files that surveys might link to)
When the instance dies for whatever reason (or is just refreshed by me) - the upload directory gets blown away along with the rest of the VM.
I plan to create a separate Elaastic Block Store device for the uploads directory, when a new application VM is created it will mount the block store in a defined location that LimeSurvey wis configured to use for uploads.
- Bounce tracking
We don't (won't) run an SMTP server on the VM. Sending emails is no problem, we use AWS Simple-Email-Service (SES) to do that but dealing with bounced email is going to be an issue.
The current plan is to monitor incoming emails from SES and then do "something" to notify LimeSurvery of the bounced email address (either update the DB directory or use or extend the remote API if possible).
- Moving surveys between environments
We will have a minimum of three LimeSurvey application Elastic-Beanstalk environments running in parallel (development, user-acceptance-test and production).
Migrating postgres databases or doing LimeSurvey export/import works well for moving data around. But the upload directory presents a problem again. As far as I can tell - there is no LimeSurvey functionality for exporting the uploaded artifacts used by a given survey - is that true or have I missed something?
Questions and future problems
The upload directory seems to be the biggest, most obvious sticking point with this whole setup - is there a way to disable the upload functionality of LimeSurvey?
I'm thinking long-term, the external artifacts for a survey should not be uploaded to LimeSurvey but should go on AWS Simple-Storage-Service (S3) - which is designed for storing and serving these kinds of things.
I'd love to hear about any pointers or help folks might be about to suggest suggest for my problem areas.
I'd also really appreciate any advice on my "unknown unknowns" - things that LimeSurvey does that are going to cause my problems that I'm not aware of yet. Features of LimeSurvey that I don't even know about that won't work with this setup?